import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.*;

/**
 * Clase para mostrar al personaje MARCO de METAL SLUG
 * @author Cesar Antonio Medina Moreno  
 * @version 29/11/12
 */
public class mslug extends Actor
{
    int posX=0,posX2=0,tamX=76/*de cada sprite*/,tamY=76;
    int cont=0,cont2=0,balaCont=0,NUMSPR=6,speed=8;
    String archivo = "mslug.png";
    boolean band = false,dateBand=true;
    Date tIni = new Date();
    
    World mun;
    Actor heli;
    helicoptero copt;
    int nbala = 0;
    
    /**
     * Funcion principal del objeto
     */
    public void act() 
    {
        Date tFin = new Date(); //objeto de la clase Date() para el cronometro
        heli = getOneIntersectingObject(helicoptero.class);//objecto de la clase actor, se usa para verificar si hay un objeto helicoptero
        
        if(((tIni.getTime()-tFin.getTime())/1000)%20 == 0)//si han transcurrido 20 segundos, se agrega un objeto helicoptero al mundo
        {
            if(dateBand)
            {
                copt = new helicoptero();
                
                mun = getWorld();
                mun.addObject(copt,630,360);
                
            }
            dateBand=false;
        }
        else
        dateBand = true;
        
        if(band)
        {
            spriteDisparo();//cambia la animacion por la de disparo
            if(cont2>8)//si cont2 es mayor a 8 se agrega un objeto bala al mundo
            {
                balaMS bala = new balaMS();
                
                mun = getWorld();
                if(nbala==0)//si nbala es igual a cero se agrega un objeto bala
                {
                    mun.addObject(bala,getX()+50,getY()-10);
                    nbala = 1;
                }
                else// si no se agrega pero con posicion Y mayor
                {
                    mun.addObject(bala,getX()+50,getY()+10);
                    nbala = 0;
                }
                cont2=0;
                balaCont++;
            } 
        }
        else
        spriteNormal();//regresa la animacion normal
        
        if(heli != null)//si se toco un objeto helicoptero
        band = true;
        else
        band = false;
        
        if(balaCont>30)//si el contador de balaCont es mayor a 30 se borra el objeto helicoptero del mundo y deja de disparar
        {
            explosion2 exp = new explosion2();
            
            balaCont = 0;
            mun = getWorld();
            mun.addObject(exp,copt.getX()+125,copt.getY());
            mun.removeObject(copt);
        }
        
        cont++;      
        cont2++;
         
    }
    
    /**
     * Funcion que establece una secuencia de imagenes para la animacion
     */
    public void spriteNormal()
    {
        
        GreenfootImage img = new GreenfootImage(archivo);
        GreenfootImage spr = new GreenfootImage(tamX,tamY);
        
        if(cont>=speed)//si el contador es mayor a la velocidad de animacion se cambia a la imagen siguiente
        {
            if(posX > -(tamX*(NUMSPR-1)))
            posX -= tamX;
            else
            posX = 0;
        
            spr.drawImage(img,posX,0);
            setImage(spr);
            cont=0;
        }
    }
    
    /**
     * Funcion que establece una secuencia de imagenes para que el personaje parezca que dispara
     */
    public void spriteDisparo()
    {
        GreenfootImage img = new GreenfootImage("mslug2.png");
        GreenfootImage spr = new GreenfootImage(120,76);
        
        if(cont>=6)//si el contador es mayor o igual a 6 se cambia la imagen para la animacion
        {
            if(posX2 > -(120*(4-1)))
            posX2 -= 120;
            else
            posX2 = 0;
        
            spr.drawImage(img,posX2,0);
            setImage(spr);
            cont=0;
        }
        
    }
    
    /**
     * Constructor de la clase mslug, establece la imagen del objeto
     */
    public mslug()
    {
        GreenfootImage img = new GreenfootImage(archivo);
        GreenfootImage spr = new GreenfootImage(tamX,tamY);
        
        spr.drawImage(img,0,0);
        setImage(spr);
    }
}
